// 在一个单独的文件中，例如 http.js
import axios from "axios";
import { ElMessage } from "element-plus";
import Cookies from "js-cookie";
import router from "@/router";

const request = axios.create({
  baseURL: "/api", //地址
  timeout: 50 * 1000, //请求时间 50s
  headers: {
    Accept: "application/json", // 接受的数据类型
    "Content-Type": "application/json",
  },
});

//请求拦截器
request.interceptors.request.use(
  (config) => {
    if (Cookies.get("token")) {
      config.headers["Authorization"] = "Token " + Cookies.get("token");
    }
    if (config.file) {
      config.headers["Content-Type"] = config.file;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    return response.data;
  },
  (error) => {
    if (error.response) {
      // 如果响应错误，根据 HTTP 状态码进行处理
      const status = error.response.status;

      // 如果状态码是 401（未授权）或 403（禁止访问），可能表示 token 失效
      if (status === 401 || status === 403) {
        // 在这里进行 token 失效的处理逻辑
        // 例如，清除本地存储的 token，然后跳转到登录页面
        Cookies.set("token", "");
        router.push("/login"); // 重定向到登录页面
        if (error.response.data.error) {
          ElMessage({
            message: error.response.data.error,
            type: "warning",
          });
        }
        return Promise.reject("");
      }
    }
    return Promise.reject(error);
  }
);

export default request;
